a9982a2
@@ -197,12 +197,14 @@
public class BridgePropertyPlaceholderConfigurer extends PropertyPlaceholderConf
     }
 
     public void setParser(PropertiesParser parser) {
-        this.parser = parser;
+        if (this.parser != null) {
+            // use a bridge if there is already a parser configured
+            this.parser = new BridgePropertiesParser(this.parser, parser);
+        } else {
+            this.parser = parser;
+        }
     }
 
-    /**
-     * {@link PropertyPlaceholderHelper.PlaceholderResolver} to support using
-     */
     private class BridgePropertyPlaceholderResolver implements PropertyPlaceholderHelper.PlaceholderResolver {
 
         private final Properties properties;
@@ -226,5 +228,39 @@
public class BridgePropertyPlaceholderConfigurer extends PropertyPlaceholderConf
         }
     }
 
+    private class BridgePropertiesParser implements PropertiesParser {
+
+        private final PropertiesParser delegate;
+        private final PropertiesParser parser;
+
+        private BridgePropertiesParser(PropertiesParser delegate, PropertiesParser parser) {
+            this.delegate = delegate;
+            this.parser = parser;
+        }
+
+        @Override
+        public String parseUri(String text, Properties properties, String prefixToken, String suffixToken) throws IllegalArgumentException {
+            String answer = null;
+            if (delegate != null) {
+                answer = delegate.parseUri(text, properties, prefixToken, suffixToken);
+            }
+            if (answer != null) {
+                text = answer;
+            }
+            return parser.parseUri(text, properties, prefixToken, suffixToken);
+        }
+
+        @Override
+        public String parseProperty(String key, String value, Properties properties) {
+            String answer = null;
+            if (delegate != null) {
+                answer = delegate.parseProperty(key, value, properties);
+            }
+            if (answer != null) {
+                value = answer;
+            }
+            return parser.parseProperty(key, value, properties);
+        }
+    }
 
 }
